/// @file boxRegistration.cpp Len registracia boxov zo zlozky activityImpls.
// ##
#include "HashJoinBox.h"
#include "HashIntersectionBox.h"
#include "HashFirstOperandSubtractionBox.h"
#include "HashFirstOperandSubtractionResultBox.h"
#include "HashSecondOperandSubtractionBox.h"
#include "../NoActionBox.h"

#include "../../../runtime/AutomaticBoxCreatorRegistration.h"

namespace jm4bbx {
	typedef HashSecondOperandSubtractionBox<IntegerHashBox> 
		IntegerHashSecondOperandSubtractionBox;

	typedef HashSecondOperandSubtractionBox<StringHashBox> 
		StringHashSecondOperandSubtractionBox;

	typedef HashFirstOperandSubtractionBox<IntegerHashBox> 
		IntegerHashFirstOperandSubtractionBox;

	typedef HashFirstOperandSubtractionResultBox<IntegerHashBox> 
		IntegerHashFirstOperandSubtractionResultBox;

	typedef HashFirstOperandSubtractionBox<StringHashBox> 
		StringHashFirstOperandSubtractionBox;

	typedef HashFirstOperandSubtractionResultBox<StringHashBox> 
		StringHashFirstOperandSubtractionResultBox;


	/// Prienik pomocou hashovania pre zaznamy s klucom typu int.
	typedef HashIntersectionBox<IntegerHashBox> IntegerHashIntersectionBox;

	/// Prienik pomocou hashovania pre zaznamy s klucom typu std::string.
	typedef HashIntersectionBox<StringHashBox> StringHashIntersectionBox; 

	// Registracia hash joinov
	REGISTER_BOX_TO_RUNTIME_BASE(HASH_JOIN_INTEGER, IntegerHashJoinBox);
	REGISTER_BOX_TO_RUNTIME_BASE(HASH_JOIN_STRING, StringHashJoinBox);

	// Registracia hash  prienikov
	REGISTER_BOX_TO_RUNTIME_BASE(HASH_INTERSECTION_INTEGER, 
		IntegerHashIntersectionBox);
	REGISTER_BOX_TO_RUNTIME_BASE(HASH_INTERSECTION_STRING, 
		StringHashIntersectionBox);

	// Registracia hash rozdielu s hahsovanim prveho operandu
	REGISTER_BOX_TO_RUNTIME_BASE(HASH_F_SUBTRACTION_INTEGER, 
		IntegerHashFirstOperandSubtractionBox);
	REGISTER_BOX_TO_RUNTIME_BASE(HASH_F_SUBTRACTION_STRING, 
		StringHashFirstOperandSubtractionBox);
	// Registracia boxu kt. po hash rozdiele s hahsovanim prveho operandu
	// zostavy vysledok.
	REGISTER_BOX_TO_RUNTIME_BASE(HASH_FR_SUBTRACTION_INTEGER, 
		IntegerHashFirstOperandSubtractionResultBox);
	REGISTER_BOX_TO_RUNTIME_BASE(HASH_FR_SUBTRACTION_STRING, 
		StringHashFirstOperandSubtractionResultBox);

	// Registracia hash rozdielu s hahsovanim druheho operandu
	REGISTER_BOX_TO_RUNTIME_BASE(HASH_S_SUBTRACTION_INTEGER, 
		IntegerHashSecondOperandSubtractionBox);
	REGISTER_BOX_TO_RUNTIME_BASE(HASH_S_SUBTRACTION_STRING, 
		StringHashSecondOperandSubtractionBox);


	REGISTER_BOX_TO_RUNTIME_BASE(NO_ACTION, NoActionBox);
} // namespace jm4bbx
